#ifndef COLORGRADIENTPICKER_H
#define COLORGRADIENTPICKER_H

#include <QWidget>
#include <QGraphicsScene>

#include "CommonTypes.h"

namespace Ui
{
    class ColorGradientPicker;
}

class ColorGradientPicker : public QWidget
{
    Q_OBJECT

public:
    explicit ColorGradientPicker(QWidget *parent = 0);
    ~ColorGradientPicker();

    void SetStartColor(float* input);
    void SetEndColor(float* input);
    void Initialize(float* s, float* e);

private slots:

    void on_RCScrollInput_valueChanged(int value);
    void on_GCScrollInput_valueChanged(int value);
    void on_BCScrollInput_valueChanged(int value);
    void on_ACScrollInput_valueChanged(int value);
    void on_AddColorButton_clicked();
    void on_RemoveColorButton_clicked();
    void on_ColorsTable_cellClicked(int row, int column);

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::ColorGradientPicker *ui;

    QGraphicsScene* CurrentPreviewScene;
    QBrush* AlphaBrush;
    QGraphicsScene* GradientPreviewScene;

    // Lista de Colores para formar el gradiente
    QVector <intercolor> Gradients;
    color32bit StartColor, EndColor;

    // Colores iniciales de respaldo
    vec4 SColorBackup;
    vec4 EColorBackup;

    // Estas funciones ordenaran tanto los colores como la tabla que los referencia
    // ademas de la vista previa del gradiente
    void SortTableAndColors();
    void UpdateGradient();
    void LoadColor(color32bit input);

signals:
    void StartColorChanged(vec4 s);
    void EndColorChanged(vec4 e);
};

#endif // COLORGRADIENTPICKER_H
